/**
 * 值会永不存在的两种情况：
 * 1.如果一个函数执行时抛出了异常，那么这个函数就永远不存在返回值；
 * 2.函数中执行无限循环的代码，也就是死循环。
 */
// 抛出异常
// function error(msg: string): never {
//   throw new Error(msg);
// }

// error('this is a error!')

// 死循环
// function loopForever(): never {
//   while (true) { }
// }

// loopForever()

type Type = number | string
function inspectWithNever(param: Type) {
  if (typeof param === 'number') {
    console.log('number')
  } else if (typeof param === 'string') {
    console.log('string')
  } else {
    const check: never = param
  }
}

inspectWithNever(1)